{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查询\n",
    "- loc( )\t通过标签或布尔数字查询数据集 （推荐使用的查询方法）\n",
    "- iloc( ）\t通过索引位来查询数据集\n",
    "- query( )\t通过布尔表达式查询数据列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期   价格\n",
      "0  python从入门到实战  埃里克  2020   85\n",
      "1    python数据分析  丹尼尔  2020   80\n",
      "2    python爬虫技术   李宁  2020   79\n",
      "3    疯狂python讲义   李刚  2019  113\n",
      "4         大数据处理  石宣化  2018   43\n",
      "5          人工智能  史蒂芬  2018   97\n",
      "6          深度学习   伊恩  2017  152\n",
      "7        人工智能算法  杰弗瑞  2020   53\n",
      "8        人工智能简史   尼克  2017   24\n"
     ]
    }
   ],
   "source": [
    "# 导入pandas包\n",
    "import pandas as pd\n",
    "# 指定导入的文件地址 默认是file，这里的路径中省略了 file:/\n",
    "data_path=\"books.csv\"\n",
    "data = pd.read_excel(data_path)\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>书名</th>\n",
       "      <th>作者</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>python数据分析</td>\n",
       "      <td>丹尼尔</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>python爬虫技术</td>\n",
       "      <td>李宁</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>疯狂python讲义</td>\n",
       "      <td>李刚</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>大数据处理</td>\n",
       "      <td>石宣化</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           书名   作者\n",
       "1  python数据分析  丹尼尔\n",
       "2  python爬虫技术   李宁\n",
       "3  疯狂python讲义   李刚\n",
       "4       大数据处理  石宣化"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查询[行 ， 列]\n",
    "data.iloc[1:5,:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "书名      python从入门到实战\n",
      "作者               埃里克\n",
      "出版日期            2020\n",
      "价格                85\n",
      "Name: 0, dtype: object\n"
     ]
    }
   ],
   "source": [
    "# 这里的 data 是上面我们从 Excel 中解析出来的数据\n",
    "print(data.loc[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "85\n"
     ]
    }
   ],
   "source": [
    "print(data.loc[0,\"价格\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "           书名  价格\n",
      "1  python数据分析  80\n",
      "2  python爬虫技术  79\n",
      "5        人工智能  97\n"
     ]
    }
   ],
   "source": [
    "print(data.loc[[1,2,5],[\"书名\",\"价格\"]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   价格\n",
      "0  python从入门到实战   85\n",
      "1    python数据分析   80\n",
      "2    python爬虫技术   79\n",
      "3    疯狂python讲义  113\n",
      "4         大数据处理   43\n",
      "5          人工智能   97\n"
     ]
    }
   ],
   "source": [
    "print(data.loc[0:5,[\"书名\",\"价格\"]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    作者  出版日期   价格\n",
      "3   李刚  2019  113\n",
      "4  石宣化  2018   43\n",
      "5  史蒂芬  2018   97\n"
     ]
    }
   ],
   "source": [
    "print(data.loc[3:5,\"作者\":\"价格\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       书名   作者  出版日期  价格\n",
      "4   大数据处理  石宣化  2018  43\n",
      "7  人工智能算法  杰弗瑞  2020  53\n",
      "8  人工智能简史   尼克  2017  24\n"
     ]
    }
   ],
   "source": [
    "print(data.loc[data[\"价格\"]<60])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期   价格\n",
      "0  python从入门到实战  埃里克  2020   85\n",
      "1    python数据分析  丹尼尔  2020   80\n",
      "2    python爬虫技术   李宁  2020   79\n",
      "3    疯狂python讲义   李刚  2019  113\n",
      "7        人工智能算法  杰弗瑞  2020   53\n"
     ]
    }
   ],
   "source": [
    "print(data.loc[data[\"出版日期\"].isin([2020,2019])])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "           书名   作者  出版日期   价格\n",
      "1  python数据分析  丹尼尔  2020   80\n",
      "2  python爬虫技术   李宁  2020   79\n",
      "3  疯狂python讲义   李刚  2019  113\n",
      "4       大数据处理  石宣化  2018   43\n",
      "5        人工智能  史蒂芬  2018   97\n",
      "6        深度学习   伊恩  2017  152\n",
      "7      人工智能算法  杰弗瑞  2020   53\n",
      "8      人工智能简史   尼克  2017   24\n"
     ]
    }
   ],
   "source": [
    "print(data.loc[1:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期  价格\n",
      "0  python从入门到实战  埃里克  2020  85\n",
      "1    python数据分析  丹尼尔  2020  80\n"
     ]
    }
   ],
   "source": [
    "print(data.loc[:1])"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 新增\n",
    "- 新增列\n",
    "- 新增行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期   价格 new_colume\n",
      "0  python从入门到实战  埃里克  2020   85          a\n",
      "1    python数据分析  丹尼尔  2020   80          b\n",
      "2    python爬虫技术   李宁  2020   79          c\n",
      "3    疯狂python讲义   李刚  2019  113          d\n",
      "4         大数据处理  石宣化  2018   43          e\n",
      "5          人工智能  史蒂芬  2018   97          f\n",
      "6          深度学习   伊恩  2017  152          g\n",
      "7        人工智能算法  杰弗瑞  2020   53          h\n",
      "8        人工智能简史   尼克  2017   24          j\n"
     ]
    }
   ],
   "source": [
    "import copy\n",
    "data_df1 =  copy.deepcopy(data)\n",
    "data_df1[\"new_colume\"]=[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"j\"]\n",
    "print(data_df1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  new            书名   作者  出版日期   价格\n",
      "0   a  python从入门到实战  埃里克  2020   85\n",
      "1   b    python数据分析  丹尼尔  2020   80\n",
      "2   c    python爬虫技术   李宁  2020   79\n",
      "3   d    疯狂python讲义   李刚  2019  113\n",
      "4   e         大数据处理  石宣化  2018   43\n",
      "5   f          人工智能  史蒂芬  2018   97\n",
      "6   g          深度学习   伊恩  2017  152\n",
      "7   h        人工智能算法  杰弗瑞  2020   53\n",
      "8   j        人工智能简史   尼克  2017   24\n"
     ]
    }
   ],
   "source": [
    "# insert 插入指定位置\n",
    "data_df2 =  copy.deepcopy(data)\n",
    "data_df2.insert(0,\"new\",[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"j\"], allow_duplicates=False)\n",
    "print(data_df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期   价格\n",
      "0  python从入门到实战  埃里克  2020   85\n",
      "1    python数据分析  丹尼尔  2020   80\n",
      "2    python爬虫技术   李宁  2020   79\n",
      "3    疯狂python讲义   李刚  2019  113\n",
      "4         大数据处理  石宣化  2018   43\n",
      "5          人工智能  史蒂芬  2018   97\n",
      "6          深度学习   伊恩  2017  152\n",
      "7        人工智能算法  杰弗瑞  2020   53\n",
      "8        人工智能简史   尼克  2017   24\n",
      "9            ss   dd  23.1   ff\n"
     ]
    }
   ],
   "source": [
    "# loc 插入指定位置\n",
    "data_df3 =  copy.deepcopy(data)\n",
    "data_df3.loc[9]=[\"ss\",\"dd\",\"23.1\",\"ff\"]\n",
    "print(data_df3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              书名   作者  出版日期   价格\n",
      "0   python从入门到实战  埃里克  2020   85\n",
      "1     python数据分析  丹尼尔  2020   80\n",
      "2     python爬虫技术   李宁  2020   79\n",
      "3     疯狂python讲义   李刚  2019  113\n",
      "4          大数据处理  石宣化  2018   43\n",
      "5           人工智能  史蒂芬  2018   97\n",
      "6           深度学习   伊恩  2017  152\n",
      "7         人工智能算法  杰弗瑞  2020   53\n",
      "8         人工智能简史   尼克  2017   24\n",
      "9             11   22  33.5   44\n",
      "10            55   66  77.7   88\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_12224\\1611387952.py:2: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
      "  data_df4 = data_df4.append(pd.DataFrame([[\"11\",\"22\",\"33.5\",\"44\"], [\"55\",\"66\",\"77.7\",\"88\"]],\n"
     ]
    }
   ],
   "source": [
    "data_df4 =  copy.deepcopy(data)\n",
    "data_df4 = data_df4.append(pd.DataFrame([[\"11\",\"22\",\"33.5\",\"44\"], [\"55\",\"66\",\"77.7\",\"88\"]], \n",
    "                       columns=[\"书名\",\"作者\",\"出版日期\",\"价格\"]),ignore_index= True)\n",
    "print(data_df4)\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 删除\n",
    "- 删除行\n",
    "- 删除列\n",
    "- 删除指定行列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期   价格\n",
      "0  python从入门到实战  埃里克  2020   85\n",
      "2    python爬虫技术   李宁  2020   79\n",
      "4         大数据处理  石宣化  2018   43\n",
      "5          人工智能  史蒂芬  2018   97\n",
      "6          深度学习   伊恩  2017  152\n",
      "7        人工智能算法  杰弗瑞  2020   53\n",
      "8        人工智能简史   尼克  2017   24\n",
      "             书名   作者  出版日期   价格\n",
      "0  python从入门到实战  埃里克  2020   85\n",
      "1    python数据分析  丹尼尔  2020   80\n",
      "2    python爬虫技术   李宁  2020   79\n",
      "3    疯狂python讲义   李刚  2019  113\n",
      "4         大数据处理  石宣化  2018   43\n",
      "5          人工智能  史蒂芬  2018   97\n",
      "6          深度学习   伊恩  2017  152\n",
      "7        人工智能算法  杰弗瑞  2020   53\n",
      "8        人工智能简史   尼克  2017   24\n"
     ]
    }
   ],
   "source": [
    "data_df_del =  copy.deepcopy(data)\n",
    "# 删除指定行 等价于drop(labels=[0,1],axis=0)\n",
    "data_df_del=data_df_del.drop(labels=[1,3])\n",
    "print(data_df_del)\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期\n",
      "0  python从入门到实战  埃里克  2020\n",
      "1    python数据分析  丹尼尔  2020\n",
      "2    python爬虫技术   李宁  2020\n",
      "3    疯狂python讲义   李刚  2019\n",
      "4         大数据处理  石宣化  2018\n",
      "5          人工智能  史蒂芬  2018\n",
      "6          深度学习   伊恩  2017\n",
      "7        人工智能算法  杰弗瑞  2020\n",
      "8        人工智能简史   尼克  2017\n"
     ]
    }
   ],
   "source": [
    "data_df_del1 =  copy.deepcopy(data)\n",
    "data_df_del1=data_df_del1.drop(labels=[\"价格\"],axis=1)\n",
    "print(data_df_del1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期\n",
      "0  python从入门到实战  埃里克  2020\n",
      "1    python数据分析  丹尼尔  2020\n",
      "2    python爬虫技术   李宁  2020\n",
      "3    疯狂python讲义   李刚  2019\n",
      "5          人工智能  史蒂芬  2018\n",
      "6          深度学习   伊恩  2017\n",
      "7        人工智能算法  杰弗瑞  2020\n",
      "8        人工智能简史   尼克  2017\n"
     ]
    }
   ],
   "source": [
    "# 同时删除指定行和列\n",
    "data_df_del4 =  copy.deepcopy(data)\n",
    "data_res=data_df_del4.drop(index=4, columns=\"价格\")\n",
    "print(data_res)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 修改\n",
    "- 修改索引\n",
    "- 修改数据值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              书名   作者  出版日期   价格\n",
      "aa  python从入门到实战  埃里克  2020   85\n",
      "1     python数据分析  丹尼尔  2020   80\n",
      "bb    python爬虫技术   李宁  2020   79\n",
      "cc    疯狂python讲义   李刚  2019  113\n",
      "4          大数据处理  石宣化  2018   43\n",
      "5           人工智能  史蒂芬  2018   97\n",
      "6           深度学习   伊恩  2017  152\n",
      "7         人工智能算法  杰弗瑞  2020   53\n",
      "8         人工智能简史   尼克  2017   24\n"
     ]
    }
   ],
   "source": [
    "# 修改行索引和 rename({0: \"aa\", 2: \"bb\", 3: \"cc\"},axis=0)  等价\n",
    "data_df_change =  copy.deepcopy(data)\n",
    "data_res=data_df_change.rename(index={0: \"aa\", 2: \"bb\", 3: \"cc\"})\n",
    "print(data_res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期  jiage\n",
      "0  python从入门到实战  埃里克  2020     85\n",
      "1    python数据分析  丹尼尔  2020     80\n",
      "2    python爬虫技术   李宁  2020     79\n",
      "3    疯狂python讲义   李刚  2019    113\n",
      "4         大数据处理  石宣化  2018     43\n",
      "5          人工智能  史蒂芬  2018     97\n",
      "6          深度学习   伊恩  2017    152\n",
      "7        人工智能算法  杰弗瑞  2020     53\n",
      "8        人工智能简史   尼克  2017     24\n"
     ]
    }
   ],
   "source": [
    "data_df_change1 =  copy.deepcopy(data)\n",
    "# 修改列索引和 rename({\"编程语言\": \"bcyy\", \"价格\": \"jiage\"},axis=1)  等价\n",
    "data_res=data_df_change1.rename(columns={\"编程语言\": \"bcyy\", \"价格\": \"jiage\"})\n",
    "print(data_res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者  出版日期   价格\n",
      "0  python从入门到实战  埃里克  2020   85\n",
      "1    python数据分析  丹尼尔  3432   80\n",
      "2    python爬虫技术   李宁  2020   79\n",
      "3    疯狂python讲义   李刚  2019  113\n",
      "4         大数据处理  石宣化  2018   43\n",
      "5          人工智能  史蒂芬  2018   97\n",
      "6          深度学习   伊恩  2017  152\n",
      "7        人工智能算法  杰弗瑞  2020   53\n",
      "8        人工智能简史   尼克  2017   24\n"
     ]
    }
   ],
   "source": [
    "# iat 指定行列 ，只能为整数索引到具体的值进行修改\n",
    "data_df_change2 =  copy.deepcopy(data)\n",
    "data_df_change2.iat[1,2]=3432\n",
    "print(data_df_change2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者   出版日期   价格\n",
      "0  python从入门到实战  埃里克  2000年   85\n",
      "1    python数据分析  丹尼尔  2000年   80\n",
      "2    python爬虫技术   李宁  2000年   79\n",
      "3    疯狂python讲义   李刚   2019  113\n",
      "4         大数据处理  石宣化   2018   43\n",
      "5          人工智能  史蒂芬   2018   97\n",
      "6          深度学习   伊恩   2017  152\n",
      "7        人工智能算法  杰弗瑞  2000年   53\n",
      "8        人工智能简史   尼克   2017   24\n"
     ]
    }
   ],
   "source": [
    "# 数据替换\n",
    "data_df_change3 =  copy.deepcopy(data)\n",
    "new_data=data_df_change3.replace(2020,\"2000年\")\n",
    "print(new_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             书名   作者   出版日期   价格\n",
      "0  python从入门到实战  埃里克  2000年   85\n",
      "1    python数据分析  丹尼尔  2000年   80\n",
      "2    python爬虫技术   李宁  2000年   79\n",
      "3    疯狂python讲义   李刚   2019  113\n",
      "4         大数据处理  石宣化  2000年   43\n",
      "5          人工智能  史蒂芬  2000年   97\n",
      "6          深度学习   伊恩  2000年  152\n",
      "7        人工智能算法  杰弗瑞  2000年   53\n",
      "8        人工智能简史   尼克  2000年   24\n"
     ]
    }
   ],
   "source": [
    "# 数据替换，传入参数为列表\n",
    "data_df_change4 =  copy.deepcopy(data)\n",
    "new_data=data_df_change4.replace([2020,2017,2018],\"2000年\")\n",
    "print(new_data)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.1"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "d6ee8951ea1f1e54d5c6db37d467cbab5e82ba9505f1ada5124c3f7e97e9c192"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
